/**
 * JiaoSeGuanLi
 * 
 * @author zy@ygdk.com
 * @time 2013-04-16
 */
var jsgl = {
	id : 'jsgl',
	treeStore : null,
	edTreeStore : null,
	i : null,
	nodeParam : {},// 缓存数据
	init : function() {
		var me = this;
		me.nodeParam = {};
		me.i = 0;
		me.initStore();
		me.initEdTreeStore();
		setTimeout(function() {
					me.doLoadData(me.glymd);
				}, 400);
		return me.getView();
	},
	glymd : {
		raw : {
			'id' : '1',
			'text' : '管理员',
			'ms' : '系统超级管理员',
			'sysid' : '1',
			leaf : true,
			'index' : '1',
			'iconCls' : 'jsglIcon'
		}
	},
	/**
	 * 初始化store
	 */
	initStore : function() {
		var me = this;
		me.treeStore = Ext.create('Ext.data.TreeStore', {
					proxy : {
						type : 'ajax',
						url : 'jsgl/GetRoleTreeServlet'
					},
					root : {
						text : 'ExtJS',
						id : me.id + '_root',
						expanded : true
					},
					folderSort : true
				});

	},
	/**
	 * 初始化gridStore
	 */
	initEdTreeStore : function() {
		var me = this;
		me.edTreeStore = Ext.create('Ext.data.TreeStore', {
					proxy : {
						type : 'ajax',
						url : 'jsgl/GetRoleServlet'
					},
					root : {
						text : '首页',
						iconCls : "icon-tab-home",
						id : me.id + '_root',
						expanded : true
					},
					autoLoad : true,
					folderSort : true,
					listeners : {
						beforeload : function(store) {
							var new_params = {
								type : me.nodeParam.type,
								roleId : me.nodeParam.roleId,
								nodeType : me.nodeParam.nodeType
							};
							Ext.apply(store.proxy.extraParams, new_params);
						},
						beforeexpand : function(node) {
							me.nodeParam.nodeType = node.raw.nodeType;
						}
					}
				});
	},
	/**
	 * 初始化tree
	 */
	getTree : function() {
		var me = this;
		var tree = Ext.create('Ext.tree.Panel', {
			title : '角色窗口',
			width : 200,
			region : 'west',
			border : 1,
			store : me.treeStore,
			rootVisible : false,
			dockedItems : [{
						xtype : 'toolbar',
						items : [{
									text : '展开全部',
									iconCls : 'icon-expand-all',
									handler : function() {
										tree.getEl().mask('展开中...');
										var toolbar = this.up('toolbar');
										toolbar.disable();
										tree.expandAll(function() {
													tree.getEl().unmask();
													toolbar.enable();
												});
									}
								}, {
									text : '闭合全部',
									iconCls : 'icon-collapse-all',
									handler : function() {
										var toolbar = this.up('toolbar');
										toolbar.disable();
										tree.collapseAll(function() {
													toolbar.enable();
												});
									}
								}]
					}],
			listeners : {
				'itemcontextmenu' : function(view, record, item, index, e,
						eOpts) {
					e.preventDefault();
					var menu = "";
					var node = record;
					if (node.id !== "0") {
						if (node.isLeaf()) {
							menu = new Ext.menu.Menu({
								items : [{
											text : '新建角色',
											iconCls : 'icon-add',
											handler : function() {
												me.addJs({}, true);
											}
										}, {
											iconCls : 'icon-edit',
											text : '编辑角色',
											handler : function() {
												me.addJs(record, false);
											}
										}, {
											iconCls : 'icon-delete',
											text : '删除(Ctrl)',
											handler : function() {
												Ext.MessageBox.confirm('选择',
														'是否删除该角色，删除后不可恢复！',
														function(btn) {
															if (btn == 'yes') {
																me
																		.removeRole(record);
															}
														});
											}

										}, {
											iconCls : 'icon-rename',
											text : '重命名',
											handler : function() {

											}
										}]
							});
						}
						menu.showAt(e.getPoint());
					}
				},
				'itemclick' : function(view, record, item, index, e, eOpts) {
					// 单击编缉角色模块
					me.addJs(record, false);
				}
			}
		});
		return tree;
	},
	/**
	 * 初始化tree
	 */
	getEdTree : function() {
		var me = this;
		var tree = Ext.create('Ext.tree.Panel', {
					title : '角色模块窗口',
					id : me.id + '_edTree',
					border : false,
					store : me.edTreeStore,
					animate : true,
					hideHeaders : true,
					rootVisible : true,
					useArrows : true,
					tbar : [{
								text : '保存',
								iconCls : 'icon-save',
								handler : function() {
									var mds = tree.getView().getChecked();
									me.saveModuleRole(mds);
								}
							}, {
								text : '返回',
								iconCls : 'icon-reback',
								handler : function() {
									me.addJs({}, true);
								}
							}, {
								text : '新建角色',
								iconCls : 'icon-add',
								handler : function() {
									me.addJs({}, true);
								}
							}]
				});
		return tree;
	},
	/**
	 * 角色模块树选择的节点
	 * 
	 * @param {}
	 *            mds
	 */
	saveModuleRole : function(mds) {
		var me = this;
		var ids = '';
		if (me.nodeParam.type == 'module') {
			for (var i = 0; i < mds.length; i++) {
				if (mds[i]) {
					ids += mds[i].get('id');
				}
				if (i != mds.length - 1) {
					ids += ',';
				}
			}
		}else if (me.nodeParam.type == 'user') {
			for (var i = 0; i < mds.length; i++) {
				if (mds[i]) {
					ids += mds[i].raw.id+'_'+mds[i].raw.nodeType;
				}
				if (i != mds.length - 1) {
					ids += ',';
				}
			}
		}
		Ext.Ajax.request({
					url : 'jsgl/SaveModuleRoleServlet',
					params : {
						ids : ids,
						roleId : me.nodeParam.roleId,
						type : me.nodeParam.type,
						sysid:hashcode
					},
					success : function(response) {
						var json = Ext.JSON.decode(response.responseText);
						if (json.success) {
							utils.hideAutoNotification("提示", json.msg);
							me.addJs(me.glymd, true);
							if(me.nodeParam.type=='module'){
								Ext.data.StoreManager.lookup('coreLeftMenuStore').reload();
							}
						} else {
							utils.showLoginWin(json.errors.messages);
						}
					},
					failure : function(response) {
						Ext.MessageBox.show({
									title : '失败',
									msg : '服务器连接失败，请稍候再试！',
									buttons : Ext.MessageBox.OK,
									icon : Ext.MessageBox.ERROR
								});
					}

				});

	},
	removeRole : function(record) {
		var me = this;
		Ext.Ajax.request({
					url : 'jsgl/DeleteRoleByIdServlet',
					params : {
						roleId : record.raw.id
					},
					success : function(response) {
						var json = Ext.JSON.decode(response.responseText);
						if (json.success) {
							if (Number(json.rs) == 1) {
								utils.hideAutoNotification("提示", json.msg);
								// 重新加载
								me.treeStore.load();
								// 返回
								me.centerPanelDo(me.getEdTree());
								me.addJs(me.glymd, false);
							} else {
								Ext.MessageBox.show({
											title : '失败',
											msg : json.msg,
											buttons : Ext.MessageBox.OK,
											icon : Ext.MessageBox.ERROR
										});
							}
						} else {
							utils.showLoginWin(json.errors.messages);
						}
					},
					failure : function(response) {
						Ext.MessageBox.show({
									title : '失败',
									msg : '服务器连接失败，请稍候再试！',
									buttons : Ext.MessageBox.OK,
									icon : Ext.MessageBox.ERROR
								});
					}

				});
	},
	/**
	 * 更新角色
	 * 
	 * @param {}
	 *            record 数据
	 * @param {}
	 *            flag 是否新建
	 * @param {}
	 *            isfirst 是否反回panel
	 */
	addJs : function(record, flag, isfirst) {
		var gzdwStore = Ext.create('Ext.data.Store', {
					fields : [{
								name : 'name'
							}, {
								name : 'value'
							}],
					proxy : {
						type : 'ajax',
						url : 'jsgl/GetRoleServlet',
						reader : {
							type : 'json',
							root : 'sysdb'
						}
					},
					autoLoad : false
				});
		gzdwStore.load({
					params : {
						type : 'sysdb'
					},
					scope : this
				});

		var title = '新建角色';
		var ishidden = true;
		if (record && record.raw) {
			title = '修改角色>>>' + record.raw.text;
			ishidden = false;
		}
		var me = this;
		var panel = Ext.create('Ext.form.Panel', {
			id : me.id + '_addjs',
			autoScroll : true,
			border : false,
			title : title,
			fieldDefaults : {
				labelAlign : 'right',
				labelWidth : 100,
				width : 340
			},
			bodyStyle : {
				padding : '10 5 3 10',
				fontSize : '12'
			},
			defaultType : 'textfield',
			tbar : [{
						text : '保存',
						iconCls : 'icon-save',
						handler : function() {
							me.saveJs(record, flag);
						}
					}, {
						text : '返回',
						hidden : true,
						iconCls : 'icon-reback',
						handler : function() {
							me.centerPanelDo(me.getEdTree());
						}
					}, {
						text : '授权用户',
						iconCls : 'user-icon',
						hidden : ishidden,
						handler : function() {
							me.centerPanelDo(me.getEdTree());
							if (Ext.getCmp(me.id + '_edTree')) {
								Ext.getCmp(me.id + '_edTree')
										.setTitle(record.raw.text + '-->授权用户');
							}

							me.nodeParam.roleId = record.raw.id;
							me.nodeParam.type = 'user';

							me.edTreeStore.load();
						}
					}, {
						text : '授权模块',
						iconCls : 'jsglIcon',
						hidden : ishidden,
						handler : function() {
							me.centerPanelDo(me.getEdTree());
							if (Ext.getCmp(me.id + '_edTree')) {
								Ext.getCmp(me.id + '_edTree')
										.setTitle(record.raw.text + '-->的模块配置');
							}
							me.nodeParam.roleId = record.raw.id;
							me.nodeParam.type = 'module';
							me.edTreeStore.load();
						}
					}, {
						text : '新建角色',
						iconCls : 'icon-add',
						hidden : ishidden,
						handler : function() {
							me.addJs({}, true);
						}
					}],
			items : [{
						fieldLabel : '角色名',
						id : me.id + '_add_sjm',
						allowBlank : false
					}, {
						fieldLabel : '角色描述',
						id : me.id + '_add_ms'
					}, {
						xtype : "combo",
						id : me.id + '_add_ssxt',
						fieldLabel : "所属系统",
						store : gzdwStore,
						editable : true,
						queryMode : 'local',
						displayField : 'name',
						valueField : 'value'
					}]
		});
		if (isfirst) {
			return panel;
		} else {
			me.centerPanelDo(panel);
			me.doLoadData(record);
		}
	},
	doLoadData : function(record) {
		var me = this;
		if (record != null && record.raw) {
			Ext.getCmp(me.id + '_add_sjm').setValue(record.raw.text);
			Ext.getCmp(me.id + '_add_ms').setValue(record.raw.ms);
			Ext.getCmp(me.id + '_add_ssxt').setValue(record.raw.sysid);
		}
	},
	/**
	 * 角色保存
	 * 
	 * @param record {}
	 *            事件节点
	 * @param flag
	 *            {boolean} true-新建
	 */
	saveJs : function(record, flag) {
		var me = this;
		var nodeId = "";
		var text = Ext.getCmp(me.id + '_add_sjm').getValue();
		var textms = Ext.getCmp(me.id + '_add_ms').getValue();
		var sysid = Ext.getCmp(me.id + '_add_ssxt').getValue();
		if (!text) {
			Ext.MessageBox.show({
						title : '警告',
						msg : '必须填写角色名称！',
						buttons : Ext.MessageBox.OK,
						icon : Ext.MessageBox.WARNING
					});
			return false;
		}
		if (record && record.raw) {
			nodeId = record.raw.id
		}
		Ext.Ajax.request({
					url : 'jsgl/SaveRoleNameServlet',
					params : {
						nodeId : nodeId,
						flag : flag,
						text : text,
						textms : textms,
						sysid : sysid
					},
					success : function(response) {
						var json = Ext.JSON.decode(response.responseText);
						if (json.success) {
							if (Number(json.rs) == 1) {
								utils.hideAutoNotification("提示", json.msg);
								// 重新加载
								me.treeStore.load();
								// 返回
								me.addJs(me.glymd, false);
							} else {
								Ext.MessageBox.show({
											title : '失败',
											msg : json.msg,
											buttons : Ext.MessageBox.OK,
											icon : Ext.MessageBox.ERROR
										});
							}
						} else {
							utils.showLoginWin(json.errors.messages);
						}
					},
					failure : function(response) {
						Ext.MessageBox.show({
									title : '失败',
									msg : '服务器连接失败，请稍候再试！',
									buttons : Ext.MessageBox.OK,
									icon : Ext.MessageBox.ERROR
								});
					}

				});
	},
	centerPanelDo : function(el) {
		var me = this;
		var centerPanel = Ext.getCmp(me.id + '_center');
		centerPanel.removeAll();
		centerPanel.add(el);
		centerPanel.doLayout();
	},

	/**
	 * 获取界面
	 * 
	 * @return {}
	 */
	getView : function() {
		var me = this;
		var view = Ext.create('Ext.panel.Panel', {
					border : false,
					id : me.id,
					layout : 'border',
					autoScroll : true,
					items : [me.getTree(), {
								xtype : 'panel',
								layout : 'anchor',
								border : false,
								region : 'center',
								autoScroll : true,
								id : me.id + '_center',
								items : [me.addJs(me.glymd, false, true)]
							}]
				});
		return view;
	}
};
